#include <stdio.h>
#include <windows.h>
#include <time.h>
#include "monthcalendar_3.h"
#include "querylunar_1.h"
#include "querysolar_2.h"
#include "howfartoday_4.h"
#include "datefromtoday_5.h"
#include "diffdays_6.h"
#include "solar_terms_7.h"
#include "festival_8.h"

// 设置控制台颜色，白底彩字
void SetConsoleColor(WORD attributes) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), attributes);
}

// 获取当前时间字符串，格式 "YYYY-MM-DD HH:MM:SS"
void GetCurTime(char *buffer, int size) {
    time_t now = time(NULL);
    struct tm *tm_now = localtime(&now);
    snprintf(buffer, size, "%04d-%02d-%02d %02d:%02d:%02d",
             tm_now->tm_year + 1900, tm_now->tm_mon + 1, tm_now->tm_mday,
             tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);
}

int main() {
    // 设置白底黑字基础（白底=BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE = 0xF0，黑字=0x0）
    // 我们想白底 + 彩色字，比如红色字体，属性 = 字体颜色 + 背景颜色
    // 字体颜色：红色 FOREGROUND_RED | FOREGROUND_INTENSITY = 0x0C
    // 背景颜色：白色 BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE = 0xF0
    // 合起来 = 0x0C | 0xF0 = 0xFC

    WORD colorWhiteBgRedText = FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE;

    // 设置控制台颜色为白底红字
    SetConsoleColor(colorWhiteBgRedText);

    // 打印标题和当前时间
    printf("=========== 万年历主界面 ===========\n");

    char timeStr[32];
    GetCurTime(timeStr, sizeof(timeStr));

    // 当前时间用红色字体显示，已设置整体为红字白底
    printf("当前时间：%s\n\n", timeStr);

    // 打印菜单，用蓝色字体
    WORD colorWhiteBgBlueText = FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE;
    SetConsoleColor(colorWhiteBgBlueText);

    printf("1. 查询农历\n");
    printf("2. 查询公历\n");
    printf("3. 显示月历\n");
    printf("4. 查询某天距今天的天数\n");
    printf("5. 查询距今天相应天数的日期\n");
    printf("6. 查询任意两天之间的天数差\n");
    printf("7. 显示二十四节气\n");
    printf("8. 显示节日\n");

    // 恢复默认白底黑字（方便后续输入）
    SetConsoleColor(BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);

    printf("\n请选择功能1-8 :");

    int choice;
    while (1) {
        scanf("%d", &choice);
        switch (choice) {
            case 1:{
                // 查询农历
                int y,m,d;
                printf("请输入公历日期 (年-月-日) : ");
                scanf("%d-%d-%d",&y,&m,&d);
                querylunar_1(y,m,d);
                break;
            }
            case 2:
                queryGregorianFromLunar();
                break;
            case 3:{
            printf("请输入你要查找的月份（年-月）");    
            int year,month;
            scanf("%d-%d",&year,&month);
            monthcalendar_3(year,month);
                // 显示月历
                break;
            }
            case 4:{
             // 查询某天距今天天数   
             howfartoday_4();
             break;
            }
            case 5:
                // 查询距今天n天的日期
                datefromtoday_5();
                break;
            case 6:
                // 查询两天间的差
                diffdays_6();
                break;
            case 7:
                // 显示节气
                solar_terms_7();
                break;
            case 8:
                // 显示节日
                showFestivals();
                break;
            case 0:
                printf("感谢使用，程序退出。\n");
                return 0;
            default:
                printf("输入有误，请重新输入。\n");
                break;
        }
    }
    return 0;
}
